iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

前端新手的學習筆記系列 第 10

Day10:每天一個小練習 - CSS動畫

  • 分享至 

  • xImage
  •  

今天逛CodePen的時候看到會跳的愛心感覺超可愛,就試著來練習看看吧。
來源:Blinking Heart!!


先做基本設定,放數字是比較容易看旋轉位置,之後會刪除

	<div class="heart">123</div>
$bgc: red;
.heart{
    width: 200px;
    height: 200px;
    background-color:$bgc&::before,
    &::after {
        content:'';//注意這行一定要加
        width: 200px;
        height: 200px;
        border-radius: 50%;
        background-color: $bgc;
        position: absolute;
        top: -100px;
        left: 0;
    };
}

向右旋轉45度

transform: rotate(45deg);

用偽元素製作圓角

	&::before,
    &::after {
        content:'';//注意這行一定要加
        width: 200px;
        height: 200px;
        border-radius: 50%;
        background-color: $bgc;
        position: absolute;
        top: -100px;
        left: 0;
    }

再把 ::before 和 ::after 的位置分開,把定位分開寫比較好修改

ps這時候把偽元素背景顏色改掉,可以看到正方形上有兩個圓圈

	&::before,
    &::after {
        content: ''; //注意這行一定要加
        width: 200px;
        height: 200px;
        border-radius: 50%;
        background-color: $bgc;
        position: absolute;
    }
    &::before {
        top: 0;
        left: -100px;
    }
    &::after {
        top: -100px;
        left: 0;
    }

接下來製作跳動效果

// 愛心的動畫
@keyframes heartBeat{
    0%{
        transform: scale(1) rotate(45deg);
        //旋轉角度一定要加,不然會用未旋轉的角度執行動畫
    }
    10%{
        transform: scale(1.25) rotate(45deg);//縮放1.25倍
    }
    100%{
        transform: scale(1) rotate(45deg);//回到原來大小
    }
}

然後在heart加上動畫的控制項就可以看到愛心開始跳動

.heart{
(略)
animation: heartBeat 1.5s infinite; //infinite = 重複播放
}

加上眼睛

// 右眼
.right-eye {
    z-index: 10;
    width: 15px;
    height: 15px;
    border-radius: 50%;
    background-color: $eyes;
    position: absolute;
    right: 120px;
    top: -10px;
}
//左眼
.left-eye {
    z-index: 10;
    width: 15px;
    height: 15px;
    border-radius: 50%;
    background-color: $eyes;
    position: absolute;
    left: -10px;
    bottom: 120px;
}

眨眼動畫

// 眼睛動畫
@keyframes blink {
    0%,
    100% {
        transform: scale(1, 0.5);
        //x軸不動,y軸變化
    }
    5%,
    95% {
        transform: scale(1,1);
    }
}

把控制項放入左右眼

.left-eye {
(略)
    animation: blink 1s infinite;
}

加上嘴巴會比較可愛

// 嘴巴
.mouth{
    z-index: 10;
    width: 65px;
    height: 10px;
    border-radius: 50%;
    background-color: $eyes;
    position: absolute;
    top: 50px;
    left: 25px;
    transform: rotate(135deg);
}

為了讓跳動時˙有顏色變化,在跳動到10%時加變色效果

@keyframes heartBeat {
(略)
    10% {
        transform: scale(1.25) rotate(45deg); //縮放1.25倍
        background-color: #e5383b;
    }
(略)
}

但這時會發現 ::before 和 ::after 兩個偽元素沒有跟著變色,這時就要針對這部分另外寫動畫

@keyframes heartBeatBgc {
    10% {
        background-color: #e5383b;
    }
}

把控制項放入偽元素內就完成了

.heart {
(略)
    &::before,
    &::after {
 (略)
        animation: heartBeatBgc 1.5s infinite;
    }
}

https://ithelp.ithome.com.tw/upload/images/20200924/20121534d0mBhFNFAs.png

連結


上一篇
Day09:每天一個小練習 - CSS旋轉拼接方塊
下一篇
Day11:每天一個小練習 - CSS咖啡杯01
系列文
前端新手的學習筆記32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言